﻿Imports Capa_de_Acceso_a_Datos
Imports Capa_de_Negocio

Public Class frmPlanDeCuentas

    Private nuevo As Boolean

    Private Sub frmPlanDeCuentas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        deshabilitarCuenta()
        cargarPlanCuentas(Me.tvPlanCuentas, "CuentaContable")

    End Sub

    Private Sub deshabilitarCuenta()
        gboCuenta.Enabled = False
        btnNuevo.Enabled = True
        btnCancelar.Enabled = False
        btnGuardar.Enabled = False
        nuevo = False
    End Sub

    Private Function cargarPlanCuentas(ByVal TvwObjeto As System.Windows.Forms.TreeView, ByVal Vista As String)

        Dim cn As SqlClient.SqlConnection = Nothing
        TvwObjeto.Nodes.Clear()
        Dim Padre As TreeNode
        Dim sPadre As String = ""
        Dim consulta As String = "SELECT * FROM " & Vista & " ORDER BY 1"
        cn = Conexion.Conectar
        Dim cmd As New SqlClient.SqlCommand(consulta, cn)
        Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader
        With TvwObjeto
            If dr.HasRows Then
                Do While dr.Read
                    If dr.IsDBNull(4) Then
                        sPadre = dr.GetString(2)
                        Padre = .Nodes.Add(dr.GetInt32(0), sPadre)
                        cargarMisHijos(Padre, dr.GetInt32(0), dr.GetString(2))
                    End If
                Loop
            End If
            cn.Close()
        End With
        Return TvwObjeto
    End Function

    Private Sub cargarMisHijos(ByRef Padre As TreeNode, ByVal CuentaContablePadreId As Integer, ByVal CuentaContableNombre As String)
        Dim cn As SqlClient.SqlConnection = Nothing
        Dim sPadre As String = CuentaContableNombre
        Dim consulta As String = "SELECT h.CuentaContableId, h.CuentaContableCodigo, h.CuentaContableNombre, h.CuentaContableRecibeAsiento, h.CuentaContablePadreId FROM CuentaContable h, CuentaContable p WHERE h.CuentaContableId = p.CuentaContableId AND h.CuentaContablePadreId = " + CStr(CuentaContablePadreId)
        cn = Conexion.Conectar
        Dim cmd As New SqlClient.SqlCommand(consulta, cn)
        Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader
        With Padre
            If dr.HasRows Then
                Do While dr.Read
                    If sPadre <> dr.GetString(2) Then
                        sPadre = dr.GetString(2)
                        Padre = .Nodes.Add(dr.GetInt32(0), sPadre)
                        cargarMisHijos(Padre, dr.GetInt32(0), dr.GetString(2))
                    Else
                        Padre.Nodes.Add(dr.GetString(3))
                    End If
                Loop
            End If
            cn.Close()
        End With
    End Sub

    Private Sub btnNuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNuevo.Click
        gboCuenta.Enabled = True
        btnNuevo.Enabled = False
        btnGuardar.Enabled = True
        btnCancelar.Enabled = True
        nuevo = True
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        deshabilitarCuenta()
    End Sub

    Private Sub btnGuardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGuardar.Click

        If nuevo = True Then
            'hacer un insert
        Else
            ' hacer un update
        End If
        'actualizar treenode
        deshabilitarCuenta()
    End Sub

    Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click
        Me.Dispose()
    End Sub


    Private Sub tvPlanCuentas_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles tvPlanCuentas.DoubleClick
        'crear un objeto cuenta ccontable
        'llenar sus datos con el resultado de la consulta
        'mostrar sus datos en el form.
        nuevo = False
        gboCuenta.Enabled = True
        Dim ctaContable As New CuentaContable()
        'TODO Ver cual es la propiedad que me devuelve el indice...si no no me sirve
        ctaContable = CuentaContableDAO.obtenerCuentaContable(tvPlanCuentas.SelectedNode.Text)
        mostrarDatos(ctaContable)
    End Sub

    Private Sub mostrarDatos(ByVal cuenta As CuentaContable)
        Dim c As New CuentaContable()
        c = cuenta
        txtCodigo.Text = CStr(cuenta.p_CuentaContableCodigo)
        txtNombre.Text = CStr(cuenta.p_CuentaContableNombre)
        txtCuentaPadre.Text = CStr(cuenta.p_CuentaContablePadreId)
        chRecibeAsiento.Checked = CStr(cuenta.p_CuentaContableRecibeAsiento)
    End Sub

    Private Sub tvPlanCuentas_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvPlanCuentas.AfterSelect

    End Sub
End Class